// models.go
package models

import (
	"database/sql"
	"encoding/json"
)

type EventData struct {
	Event string `json:"event"`
	Data  struct {
		Amount int `json:"amount"`
	} `json:"data"`
}

// LiveEventData 表示直播事件的统一结构体
type LiveEventData struct {
	Event string `json:"event"`
	Data  struct {
		MsgID         string `json:"msg_id"`         // 事件的ID
		SecOpenID     string `json:"sec_openid"`     // 用户的加密openid
		Type          string `json:"type"`           // 事件类型：comment, gift, like
		Content       string `json:"content"`        // 评论内容（仅评论有效）
		Camp          int    `json:"camp"`           // 所属阵营
		Job           int    `json:"job"`            // 所属职业
		SecGiftID     string `json:"sec_gift_id"`    // 加密的礼物id（仅礼物有效）
		GiftNum       int    `json:"gift_num"`       // 送出的礼物数量（仅礼物有效）
		GiftValue     int    `json:"gift_value"`     // 礼物总价值，单位分（仅礼物有效）
		Name          string `json:"name"`           // 用户昵称
		Level         int    `json:"level"`          // 用户等级
		AccGiftScore  int    `json:"acc_gift_score"` // 直播间当前用户累计礼物积分
		LikeNum       string `json:"like_num"`       // 点赞数量（仅点赞有效）
		AvatarURL     string `json:"avatar_url"`     // 用户头像
		Nickname      string `json:"nickname"`       // 用户昵称
		UserScore     int    `json:"user_score"`     // 用户昵称
		GiftLevel     int    `json:"gift_level"`     // 礼物等级
		GiftUpgrading int    `json:"gift_upgrading"` // 礼物当前次升级
		GameScore     int    `json:"game_score"`     // 游戏当局分数
		Timestamp     int64  `json:"timestamp"`      // 事件时间戳
	} `json:"data"`
}

type FinishTrackInfo struct {
	Track        int     `json:"track"`
	IsChampion   int     `json:"is_champion"`
	IsFinish     int     `json:"is_finish"`
	Mileage      int     `json:"mileage"`       //里程数
	JumpHeight   float32 `json:"jump_height"`   //登高高度
	FinishTime   int     `json:"finish_time"`   //完成时间(s)
	FastestSpeed int     `json:"fastest_speed"` //最快速度
	AttackPower  int     `json:"attack_power"`  //当局的导弹次数
	GameMode     int     `json:"game_mode"`     //当局的游戏类型，从1开始
}

// LiveRoomResult 表示 live_room_result 表的结构
type LiveRoomResult struct {
	LiveRoomID   string       `json:"live_room_id"`
	Times        int          `json:"times"`
	UserID       string       `json:"user_id"`
	GameScore    int          `json:"game_score"`
	Track        int          `json:"track"`
	Job          int          `json:"job"`
	IsChampion   int          `json:"is_champion"`
	IsFinish     int          `json:"is_finish"`
	IsBiggest    int          `json:"is_biggest"`
	GiftValue    int          `json:"gift_value"`
	GiftScore    int          `json:"gift_score"`
	GetScore     int          `json:"get_score"`
	HasDone      int          `json:"has_done"`
	UserName     string       `json:"user_name"`
	HeadImg      string       `json:"head_img"`
	UserLevel    int          `json:"user_level"`
	UserScore    int          `json:"user_score"`
	TargetLevel  int          `json:"target_level"`
	TargetScore  int          `json:"target_score"`
	Mileage      int          `json:"mileage"`
	JumpHeight   float32      `json:"jump_height"`
	FinishTime   int          `json:"finish_time"`
	FinishTime1  int          `json:"finish_time1"`
	FinishTime2  int          `json:"finish_time2"`
	FastestSpeed int          `json:"fastest_speed"`
	AttackPower  int          `json:"attack_power"`
	ExpireAt     sql.NullTime `json:"expire_at"`
	CreateAt     sql.NullTime `json:"create_at"`
	UpdateAt     sql.NullTime `json:"update_at"`
	TotalRank    int          `json:"total_rank"`
}
type RankInfo struct {
	Index    int     `json:"index"`
	UserId   string  `json:"user_id"`
	UserName string  `json:"user_name"`
	HeadImg  string  `json:"head_img"`
	Level    int     `json:"level"`
	Value    int     `json:"value"`
	FValue   float32 `json:"f_value"`
}
type RankInfos struct {
	ScoreRank      []RankInfo `json:"score_rank"`
	JumpHeightRank []RankInfo `json:"jump_height_rank"`
	MileageRank    []RankInfo `json:"mileage_rank"`
}

type WorldRecods struct {
	FastestSpeed int     `json:"fastest_speed"`
	FinishTime   int     `json:"finish_time"`
	FinishTime1  int     `json:"finish_time1"`
	FinishTime2  int     `json:"finish_time2"`
	JumpHeight   float32 `json:"jump_height"`
	AttackPower  int     `json:"attack_power"`
}

type LiveRoomUserInfo struct {
	RoomId       string
	AnchorOpenId string
	AvatarUrl    string
	NickName     string
}

type LiveRoomFailGiftData struct {
	PageNum    int `json:"page_num"`
	TotalCount int `json:"total_count"`
	DataList   []struct {
		RoomId  string          `json:"room_id"`
		MsgType string          `json:"msg_type"`
		Payload json.RawMessage `json:"payload"`
	} `json:"data_list"`
}

// 新增请求体结构体（对应前端发送的JSON结构）
type GiftRequestPayloadArr struct {
	Arr []GiftRequestPayload `json:"arr"`
}

// 抖音推送数据的礼物元数据
type GiftRequestPayload struct {
	MsgID     string `json:"msg_id"`
	SecOpenID string `json:"sec_openid"`
	SecGiftId string `json:"sec_gift_id"`
	GiftNum   int    `json:"gift_num"`
	GiftValue int    `json:"gift_value"`
	AvatarURL string `json:"avatar_url"`
	Nickname  string `json:"nickname"`
	Timestamp int64  `json:"timestamp"`
}

// 抖音推送数据的评论元数据
type CommentOneRequest struct {
	MsgID     string `json:"msg_id"`
	SecOpenID string `json:"sec_openid"`
	Content   string `json:"content"`
	AvatarURL string `json:"avatar_url"`
	Nickname  string `json:"nickname"`
	Timestamp int64  `json:"timestamp"`
}

type CommentRequest struct {
	Arr []CommentOneRequest `json:"arr"`
}

// 抖音推送数据的点赞元数据
type LikeOneRequest struct {
	MsgID     string `json:"msg_id"`
	SecOpenID string `json:"sec_openid"`
	LikeNum   int    `json:"like_num"`
	AvatarURL string `json:"avatar_url"`
	Nickname  string `json:"nickname"`
	Timestamp int64  `json:"timestamp"`
}

type LikeRequest struct {
	Arr []LikeOneRequest `json:"arr"`
}

// 抖音推送数据的点赞元数据
type FansOneRequest struct {
	MsgID              string `json:"msg_id"`
	SecOpenID          string `json:"sec_openid"`
	AvatarURL          string `json:"avatar_url"`
	Nickname           string `json:"nickname"`
	Timestamp          int64  `json:"timestamp"`
	FansClubLevel      int    `json:"fansclub_level"`       // 用户粉丝团等级，加团消息下默认传1
	FansClubReasonType int    `json:"fansclub_reason_type"` // 粉丝团消息类型：1-升级，2-加团
}

// 抖音推送数据的点赞元数据
type FansRequest struct {
	Arr []FansOneRequest `json:"arr"`
}

// 抖音推送数据的同步对局数据的元数据
type SyncGameGroupResultToDouYinBody struct {
	GroupId string `json:"group_id"` // 阵营id，red, green, yellow
	Result  int    `json:"result"`   // 对局结果（1=胜利、2=失败、3=平局）
}

// 抖音推送数据的用户对局的元数据
type UploadUserGameResultUserBody struct {
	OpenId             string `json:"open_id"`              //  用户Id
	Rank               int    `json:"rank"`                 // 用户排名
	RoundResult        int    `json:"round_result"`         // 对局结果（1=胜利、2=失败、3=平局）
	Score              int    `json:"score"`                // 用户积分的排名
	WinningPoints      int    `json:"winning_points"`       // 用户的胜点，如果没有胜点记录传0
	WinningStreakCount int    `json:"winning_streak_count"` // 用户的连胜次数，如果没有连胜记录传0
}

// 抖音推送数据的排行榜的元数据
type UploadGameRankResultBody struct {
	OpenId             string `json:"open_id"`              //  用户Id
	Rank               int    `json:"rank"`                 // 用户排名
	RoundResult        int    `json:"round_result"`         // 对局结果（1=胜利、2=失败、3=平局）
	Score              int    `json:"score"`                // 用户积分的排名
	WinningPoints      int    `json:"winning_points"`       // 用户的胜点，如果没有胜点记录传0
	WinningStreakCount int    `json:"winning_streak_count"` // 用户的连胜次数，如果没有连胜记录传0
}

// 抖音查询观众阵营的数据结构
type DouYinGetUserGroupRequest struct {
	AppId  string `json:"app_id"`
	OpenId string `json:"open_id"`
	RoomId string `json:"room_id"`
}

// 抖音推送观众选择阵营的数据结构
type DouYinPushUserGroupRequest struct {
	AppId     string `json:"app_id"`
	OpenId    string `json:"open_id"`
	RoomId    string `json:"room_id"`
	GroupId   string `json:"group_id"`
	AvatarUrl string `json:"avatar_url"`
	NickName  string `json:"nickname"`
}
